home *** CD-ROM | disk | FTP | other *** search
/ Merciful 2 / Merciful - Disc 2.iso / software / d / diropus5soundplayer.lha / player2_2opus5 / arexx / PlayCDDA_YACDP.dopus5 next >
Text File  |  1995-10-10  |  14KB  |  421 lines

  1. /* Programm: PlayCDDA_YACDP.dopus5 [10-Oktober-1995]
  2. ** $VER: PlayCDDA_YACDP.dopus5 2.2 (10-Okt-1995)
  3. ** 
  4. ** Needed: Directory Opus V5.11 (© by Jonathan Potter & GPSoftware)
  5. **         YACDP V1.3 (© 1995 by Frank Würkner)
  6. **
  7. **           SCSI-CDROM required !
  8. **           only for save AIFF :
  9. **           CDDA V1.12 (Author: mlelstvspecklec.mpifr-bonn.mpg.de)
  10. **           only for save ADPCM3:
  11. **           CDRipper (Author: flowerpeikon.e-technik.tu-muenchen.de)
  12. **
  13. ** Copyright © 1995 Eckhard Ludwig (EMail: Eckhard@top.east.de)
  14. ** PlayCDDA_YACDP.dopus5 is freeware. It may be distributed freely.
  15. **
  16. ** Play Audio-CD from DOPUS5, Test Play Audio-CD, Save Tracks to
  17. ** CDR, IFF 8SVX, AIFF & ADPCM3.
  18. **
  19. ** Create new button (Audio-CD), Call as:
  20. ** ----------------------------------------------------------------------
  21. ** ARexx    DOpus5:ARexx/PlayCDDA_YACDP.dopus5 {Qp}
  22. ** ----------------------------------------------------------------------
  23. ** Set all attribut off.
  24. */
  25.  
  26. /*--------S E T T I N G S : --------------------------------------------*/
  27. /* If the file PlayCDDA_YACDP.PREFS exists, that one will override the  */
  28. /* settings here ...                                                    */
  29.  
  30. /* Path to YACDP V1.3 (© 1995 by Frank Würkner)
  31.    (Run needed L:WBStart-Handler & C:WBStarter!) */
  32. CDPlay = "WORK:YACDP/YACDP" /* Please edit your path ! */
  33.  
  34. /* Path to CDDA V1.12 */
  35. CDSave = "C:CDDA" /* only for save AIFF */
  36. /* Path to CDRipper  */
  37. CDRip = "C:CDRipper" /* only for save ADPCM3 */
  38.  
  39. /*-Volume Settings------------------------------------------------------*/
  40.  
  41. CDROMVOLUME=255 /* 1 to 255 (For play via CDROM)       */
  42. AMIGAVOLUME=65  /* 1 to 65  (For play via Amigaaudio)  */
  43.                 /* 0 = no volumesetting & no balancesetting  */
  44. PLAYVIASCSI=0   /* 0=off (Play via CDROM) 1=on (Play via SCSI/Amigaaudio)*/
  45.  
  46. /*--end of settings------------------------------------------------------*/
  47.  
  48.  
  49. if ~show('l','rexxsupport.library') then
  50.     call addlib('rexxsupport.library',0,-30,0)
  51. if ~openport('cdda-handler') then exit
  52.  
  53. if open(1,'env:PlayCDDA_YACDP.prefs','R') then do
  54.    do i=1 to 7
  55.     prefs.i = readln(1)
  56.         end
  57.    if prefs.2 ~="" then CDPLAY=prefs.2
  58.    if prefs.3 ~="" then CDSave=prefs.3
  59.    if prefs.4 ~="" then CDRip =prefs.4
  60.    if prefs.5 ~="" then CDROMVOLUME=prefs.5
  61.    if prefs.6 ~="" then AMIGAVOLUME=prefs.6
  62.    if prefs.7 ~="" then PLAYVIASCSI=prefs.7
  63. drop prefs.
  64. end
  65. call close(1)
  66.  
  67. /* init locale */
  68. if ~show(l,'locale.library') then
  69.         call addlib('locale.library',0,-30)
  70. if show(l,'locale.library') then
  71.         catalog=opencatalog('PlayCDDA_YACDP.catalog','deutsch',0)
  72.  
  73.  
  74. parse arg portname
  75. if portname='' then portname='DOPUS.1'
  76. address value portname
  77.  
  78. signal on syntax
  79. options results
  80. options failat 20
  81. lf='0a'x
  82.  
  83. if ~show('P','YACDP') then do
  84.    if ~exists(CDPlay) then do
  85.       dopus front
  86.       dopus request '"'getcatstr(0,'Fehler:'lf'YACDP nicht gefunden (Pfad: %s ?).'lf'Setze Pfad oder starte YACDP V1.3 zuerst !',CDPlay)'"' getcatstr(1,'Beenden')
  87.       Exit
  88.       end
  89.    if ~exists("C:WBStarter") then do
  90.       dopus front
  91.       dopus request '"'getcatstr(2,'Fehler:'lf'  C:WBStarter nicht gefunden. Starte YACDP V1.3 zuerst !')'"' getcatstr(1,'Beenden')
  92.       Exit
  93.       end
  94.    address command "C:WBStarter "||CDPlay
  95.    address command 'waitforport YACDP'
  96. end
  97.     
  98. address value portname
  99. lister new
  100. handle=result
  101.  
  102. do forever   /* Schleife bei CD-Wechsel */
  103. address 'YACDP'   
  104. 'HIDE'
  105. 'GETVAR STATUS'
  106. if (STATUS < 3) then call Meldung1
  107. 'STOP'
  108. 'GETVAR CDNAME'
  109. 'GETVAR BY'
  110. 'GETVAR MAXTRACK'
  111. if CDNAME="-" then CDNAME=getcatstr(3,'Audio-CD nicht katalogisiert')
  112.  
  113. address value portname
  114. lister set handle title CDNAME||"    "||BY
  115. lister set handle sort name
  116. lister set handle busy on
  117. lister set handle progress MAXTRACK getcatstr(4,'Erstelle Titelliste ...')
  118. lister refresh handle full  
  119.  
  120. do i=1 to MAXTRACK
  121.    lister query handle abort
  122.    if result then leave
  123.    lister set handle progress count i
  124.    lister set handle progress name getcatstr(5,'Titel')' 'i
  125.    address 'YACDP'
  126.    'GETVAR STATUS'
  127.    if (STATUS < 3) then leave
  128.    'GETVAR SONGNAME NUM='i
  129.    'GETVAR TRACKLEN NUM='i' T2 MODE=1' 
  130.    'GETVAR TRACKLEN NUM='i
  131.    'GETVAR TRACKSTART NUM='i
  132.    SONGNAME=TRANSLATE(SONGNAME,"'",'22'x) /* STRIP "  */
  133.    j=right(i,2)
  134.    Startblock=right(TRACKSTART,6)
  135.    Endblock=right(TRACKSTART+TRACKLEN-1,6)
  136.    address value portname   
  137.    if SONGNAME="-" then SONGNAME='Track  'j'   '
  138.    lister add handle '"'j" "SONGNAME'" "'TRACKLEN*2352'" -1 0 r '"* "T2'  'Startblock" - "Endblock''
  139.    lister set handle display name size comment
  140.    lister refresh handle full
  141. end
  142.  
  143. address 'YACDP'
  144. 'GETVAR STATUS'
  145. if (STATUS < 3) then do
  146.     address value portname
  147.     lister set handle busy off
  148.     lister clear handle
  149.     lister refresh handle full
  150.     iterate
  151.     end
  152. 'GETVAR CDLEN'
  153. cdid=CDLEN
  154.  
  155. address value portname
  156. lister set handle busy off
  157. lister set handle handler 'cdda-handler' 'quotes'
  158.  
  159. /* install traps */
  160. dopus addtrap copy 'cdda-handler'
  161. dopus addtrap move 'cdda-handler'
  162. dopus addtrap copyas 'cdda-handler'
  163. dopus addtrap moveas 'cdda-handler'
  164. dopus addtrap delete 'cdda-handler'
  165. dopus addtrap rename 'cdda-handler'
  166. dopus addtrap devicelist 'cdda-handler'
  167. dopus addtrap parent 'cdda-handler'
  168. dopus addtrap show 'cdda-handler'
  169. dopus addtrap play 'cdda-handler'
  170. dopus addtrap protect 'cdda-handler'
  171. dopus addtrap datestamp 'cdda-handler'
  172. dopus addtrap comment 'cdda-handler'
  173. dopus addtrap makedir 'cdda-handler'
  174.  
  175. do forever
  176.   if waitpkt('cdda-handler') then do
  177.    packet=getpkt('cdda-handler')
  178.    if packet='00000000'x then iterate
  179.    event=getarg(packet,0)
  180.    handle=getarg(packet,1)
  181.    titel=getarg(packet,2)
  182.    user=getarg(packet,3)
  183.    pathstr=getarg(packet,4)
  184.    if event="Parent" then leave
  185.    if event="parent" then leave
  186.    if event="inactive" then call Ende
  187.    address 'YACDP'
  188.    'GETVAR STATUS'
  189.    if (STATUS < 3) then leave
  190.    'GETVAR CDLEN'
  191.    if CDLEN~=cdid then leave
  192.     select
  193.       when event="doubleclick" then call Player
  194.       when event="Play" then call SelPlay
  195.       when event="path" then call SelPlay
  196.       when event="Show" then call CDTest
  197.       when event="Copy" then call SaveCD
  198.       when event="Move" then call SaveCD
  199.       when event="CopyAs" then call SaveCDAs
  200.       when event="MoveAs" then call SaveCDAs
  201.       when event="MakeDir" then iterate
  202.       when event="dropfrom" then call SaveCD
  203.       when event="drop" then iterate
  204.       otherwise call Productinfo
  205.     end
  206.    reply(packet,10)
  207.   end
  208. end
  209. address value portname
  210. lister clear handle
  211. lister refresh handle full
  212. end      /* Ende Schleife bei CD-Wechsel */
  213.  
  214. /*---------------------------------------------------------------------------------*/
  215. SelPlay:
  216. address value portname
  217. lister set handle busy on
  218. lister query handle selfiles stem files.
  219. lister set handle progress files.count getcatstr(6,'Spiele Audio-CD ...')
  220. lister refresh handle full  
  221.  
  222. do i=0 to files.count-1
  223.    lister query handle abort
  224.    if result then leave
  225.    lister set handle progress count i+1
  226.    lister set handle progress name i+1"/"files.count"  "files.i
  227.    titel=files.i
  228.    call Player
  229.    address 'YACDP'
  230.    'WAIT ' TRACKSTART+TRACKLEN 'FLAGS='2+128+8192+16384
  231.    'STOP'
  232.    address value portname
  233.    lister select handle '"'files.i'"' off
  234.    lister refresh handle full
  235. end
  236.  
  237. lister set handle busy off
  238. return
  239.  
  240. /*---------------------------------------------------------------------------------*/
  241. Player:
  242. address 'YACDP'
  243. 'STOP'
  244. if CDROMVOLUME>0 then 'PUTVAR CDROMVOL VALUE='CDROMVOLUME
  245. if AMIGAVOLUME>0 then 'PUTVAR AMIVOL VALUE='AMIGAVOLUME
  246. if CDROMVOLUME>0 then'PUTVAR CDROMBAL VALUE='0
  247. if AMIGAVOLUME>0 then 'PUTVAR AMIBAL VALUE='0
  248. 'PUTVAR VIASCSI VALUE='PLAYVIASCSI
  249. if PLAYVIASCSI=1 then 'PUTVAR LOWPASSFILTER VALUE='0
  250. 'GETVAR TRACKSTART NUM='left(titel,2)
  251. 'GETVAR TRACKLEN NUM='left(titel,2)
  252. 'PLAYBLOCK ' TRACKSTART
  253. return
  254.  
  255. /*---------------------------------------------------------------------------------*/
  256. CDTest:
  257. address 'YACDP'
  258. 'STOP'
  259. 'REQUESTER DUMMY 'getcatstr(8,'"Audio-CD anspielen:"') getcatstr(7,'"Die Titel anspielen für wie lang ?"') getcatstr(9,'"15s|30s|15s ab 0:30|Abbruch"')
  260. if DUMMY=0 then return
  261. if DUMMY=2 then sec=30
  262.    else sec=15
  263. address value portname
  264. lister set handle busy on
  265. lister query handle selfiles stem files.
  266. lister set handle progress files.count getcatstr(10,'Spiele Titel kurz an ...')
  267. lister refresh handle full  
  268.  
  269. do i=0 to files.count-1
  270.    lister query handle abort
  271.    if result then leave
  272.    lister set handle progress count i+1
  273.    lister set handle progress name i+1"/"files.count"  "files.i
  274.    titel=files.i
  275.    call Player
  276.    address 'YACDP'
  277.    if DUMMY=3 then do
  278.       'STOP'
  279.       'PLAYBLOCK ' TRACKSTART+75*30
  280.       'WAIT ' TRACKSTART+75*45 'FLAGS='2+128+8192+16384
  281.       end
  282.       else 'WAIT ' TRACKSTART+75*sec 'FLAGS='2+128+8192+16384
  283.    'STOP'
  284.    address value portname
  285.    lister select handle '"'files.i'"' 0
  286.    lister refresh handle full
  287. end
  288.  
  289. lister set handle busy off
  290. return
  291. /*---------------------------------------------------------------------------------*/
  292. SaveCDAs:
  293. SaveCD:
  294. address 'YACDP'
  295. 'STOP'
  296. 'GETVAR DEVICE'
  297. 'GETVAR UNIT'
  298. 'REQUESTER DUMMY 'getcatstr(11,'"Speichern von Audiodaten:"') getcatstr(12,'"Bitte das Speicherformat wählen."') getcatstr(13,'"CDR|8SVX|MONO|AIFF|ADPCM3|Abbruch"')
  299. if DUMMY=0 then return
  300. if DUMMY=1 then FT=".cdr"
  301. if DUMMY=2 then FT=".8svx"
  302. if DUMMY=3 then FT=".mono"
  303. if DUMMY=5 then do
  304.     if ~exists(CDRip) then do
  305.        'REQUESTER DUMMY 'getcatstr(14,'"Leider ist ein Fehler aufgetreten !"') getcatstr(15,'"Der ADPCM-Saver wurde nicht gefunden (Pfad %s ?)."',CDRip) getcatstr(16,'"Zurück"')
  306.        return
  307.            end
  308.     else FT=".adpcm3"
  309. end
  310. if DUMMY=4 then do
  311.     if ~exists(CDSave) then do
  312.        'REQUESTER DUMMY 'getcatstr(14,'"Leider ist ein Fehler aufgetreten !"') getcatstr(17,'"Der AIFF-Saver wurde nicht gefunden (Pfad %s ?)."',CDSave) getcatstr(16,'"Zurück"')
  313.        return
  314.            end
  315.     else do
  316.       FT=".aiff"
  317.       call open('file','ENV:CDDA_DEVICE',W)
  318.       call writech('file',DEVICE)
  319.       call close ('file')
  320.       call open('file','ENV:CDDA_UNIT',W)
  321.       call writech('file',UNIT)
  322.       call close ('file')
  323.     end
  324. end
  325. address value portname
  326. lister set handle busy on
  327. lister set user busy on
  328. if event='dropfrom' then do
  329.    files.count=1
  330.    LNG=POS('22'x,titel,2)-1
  331.    titel=left(titel,LNG)
  332.    files.0=right(titel,LNG-1)
  333.    end
  334.    else lister query handle selfiles stem files.
  335. lister set handle progress files.count getcatstr(18,'Speichere Audiodaten ...')
  336. lister refresh handle full  
  337. lister query user path
  338. Zielpfad=result
  339. do i=0 to files.count-1
  340.    lister query handle abort
  341.    if result then leave
  342.    titel=strip(left(substr(files.i,4),24))
  343.    lister set handle progress count i+1
  344.    lister set handle progress name i+1"/"files.count"  "titel||FT
  345.    address 'YACDP'
  346.    'GETVAR TRACKSTART NUM='left(files.i,2)
  347.    'GETVAR TRACKLEN NUM='left(files.i,2)
  348.    if DUMMY=5 then address command CDRip||" "||left(files.i,2)||" to "||'"'Zielpfad||titel||FT'"'||" bits=3 Device="||DEVICE||" Unit="||Unit
  349.    if DUMMY=4 then address command CDSave||" START="||TRACKSTART||" LENGTH="||TRACKLEN||" FILE="'"'||Zielpfad||titel||FT'"'||" MUTE BUFS=64"
  350.       else "SAVEAUDIO FILENAME="'"'Zielpfad||titel||FT'"' "STARTBLOCK="TRACKSTART "ENDBLOCK="TRACKSTART+TRACKLEN "COMP="DUMMY "TYPE="DUMMY
  351.    address command "FILENOTE "||'"'Zielpfad||titel||FT'"'||" "||'"'CDNAME||"    "||BY'"'
  352.    address value portname
  353.    lister select handle '"'files.i'"' off
  354.    lister refresh handle full
  355. end
  356.  
  357. lister set handle busy off
  358. lister set user busy off
  359. lister read user Zielpfad force
  360. lister refresh user full
  361. return
  362.  
  363. /*---------------------------------------------------------------------------------*/
  364. Productinfo:
  365. address 'YACDP'
  366. do forever
  367.  'REQUESTER DUMMY 'getcatstr(19,'"Über PlayCDDA_YACDP.dopus5 V2.2"') getcatstr(20,'"Copyright ©1995 Eckhard Ludwig.*nFrei verteilbare copyrighted Software."') getcatstr(21,'"Beenden|Über CDROM|Hilfe|Ok"')
  368.  if DUMMY=0 then return
  369.  if DUMMY=1 then call Ende
  370.  if DUMMY=2 then do
  371.    'GETVAR DEVICE'
  372.    'GETVAR UNIT'
  373.    'GETVAR BOARD'
  374.    'GETVAR PRODUCT'
  375.    'GETVAR REVISION'
  376.    'GETVAR VENDORID'
  377.    'REQUESTER DUMMY "Device='DEVICE' Board='BOARD' Unit='UNIT'" "'VENDORID' 'PRODUCT'  Rev.'REVISION'" 'getcatstr(24,'"Zurück"')
  378.    end
  379.  else 'REQUESTER DUMMY 'getcatstr(22,'"PlayCDDA_YACDP.dopus5 Hilfe"') getcatstr(23,'"Parent: CD neu einlesen*nDoppelklick: Spielen ab geklickten Titel*nAbspielen: Spiele alle selektierten Titel*nAnzeigen: Spiele alle selektierten Titel kurz an*nKopieren: Selektierte Titel speichern"') getcatstr(24,'"Zurück"')
  380. end
  381. /*---------------------------------------------------------------------------------*/
  382. Meldung1:
  383. do forever
  384.   if (STATUS = 0) then leave
  385.  'REQUESTER DUMMY 'getcatstr(25,'"PlayCDDA_YACDP.dopus5   Fehler"') getcatstr(26,'"Bitte eine Audio-CD einlegen !"') getcatstr(27,'"Beenden|Ok"')
  386.   if DUMMY=1 then leave
  387.   'WAIT 0 321'
  388.   address value portname
  389.   lister query handle busy
  390.   if RC>0 then leave
  391.   address 'YACDP'
  392.   'GETVAR STATUS'
  393.   if STATUS>2 then return
  394. end
  395. /*---------------------------------------------------------------------------------*/
  396. Ende:
  397. address value portname
  398. lister close handle
  399. dopus remtrap '*' 'cdda-handler'
  400. call closeport('cdda-handler')
  401. address 'YACDP'
  402. 'GETVAR STATUS'
  403. if (STATUS>2) then EJECT
  404. QUIT
  405. exit
  406. /*---------------------------------------------------------------------------------*/
  407. getcatstr:
  408.    parse arg msgno,msgstring,insert.1,insert.2
  409.    if catalog~=0 then msgstring=getcatalogstr(catalog,msgno,msgstring)
  410.    j=0
  411.    do while pos('%s',msgstring)>0
  412.       parse var msgstring fore '%s' aft
  413.       j=j+1
  414.       msgstring=fore||insert.j||aft
  415.       end
  416.    return msgstring
  417. /*---------------------------------------------------------------------------------*/
  418. syntax:
  419. SAY "error at line" SIGL ":" RC
  420. Return
  421.